'''状态码的含义（先含义后常见）
一、200状态码：请求成功： 成功处理了请求的状态码。
200：服务器已成功处理了请求并提供了请求的网页。
204：服务器成功处理了请求，但没有返回任何内容。
300状态码：重定向3×× ：每次请求中使用重定向不要超过5次。
301：请求的网页已永久移动到新位置。当URLs发生变化时，使用301代码。搜索引擎索引中保存新的URL。
302：请求的网页临时移动到新位置。搜索引擎索引中保存原来的URL。
304：如果网页自请求者上次请求后没有更新，则用304代码告诉搜索引擎机器人，可节省带宽和开销。
400状态码：客户端错误4×× ：表示请求可能出错，妨碍了服务器的处理。
400：服务器不理解请求的语法。
403：服务器拒绝请求。
404：服务器找不到请求的网页。服务器上不存在的网页经常会返回此代码。
410：请求的资源永久删除后，服务器返回此响应。该代码与 404（未找到）代码相似，但在资源以前存在而现在不存在的情况下，有时用来替代404 代码。如果资源已永久删除，应当使用 301 指定资源的新位置。
500状态码：服务器错误5×× ：表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误，而不是请求出错。
500 ：服务器遇到错误，无法完成请求。
503： 服务器目前无法使用（由于超载或停机维护）。
'''


'''
get和post的区别
1、传送方式：get通过地址栏传输，post通过报文传输。
2、传送长度：get参数有长度限制（受限于url长度），而post无限制
3、GET和POST还有一个重大区别，简单的说：post使用的http+ssl加密协议传输，安全性更有保证
        1、get方式的安全性较Post方式要差些，包含机密信息的话，建议用Post数据提交方式；
        2、在做数据查询时，建议用Get方式；而在做数据添加、修改或删除时，建议用Post方式；
        GET在浏览器回退时是无害的，而POST会再次提交请求。
        GET产生的URL地址可以被Bookmark，而POST不可以。
        GET请求会被浏览器主动cache，而POST不会，除非手动设置。
        GET请求只能进行url编码，而POST支持多种编码方式。
        GET请求参数会被完整保留在浏览器历史记录里，而POST中的参数不会被保留。
        GET请求在URL中传送的参数是有长度限制的，而POST么有。
        对参数的数据类型，GET只接受ASCII字符，而POST没有限制。
        GET比POST更不安全，因为参数直接暴露在URL上，所以不能用来传递敏感信息。
        GET参数通过URL传递，POST放在Request body中
'''



'''session和cookie的区别
1、数据存放位置不同：cookie数据存放在客户的浏览器上，session数据放在服务器上。
2、安全程度不同：cookie不是很安全，别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
3、性能使用程度不同：session会在一定时间内保存在服务器上。当访问增多，会比较占用你服务器的性能,考虑到减轻服务器性能方面，应当使用cookie。
4、数据存储大小不同：单个cookie保存的数据不能超过4K，很多浏览器都限制一个站点最多保存20个cookie，而session则存储与服务端，浏览器对其没有限制。
5、会话机制不同
    session会话机制：session会话机制是一种服务器端机制，它使用类似于哈希表（可能还有哈希表）的结构来保存信息。
    cookies会话机制：cookie是服务器存储在本地计算机上的小块文本，并随每个请求发送到同一服务器。 Web服务器使用HTTP标头将cookie发送到客户端。在客户端终端，浏览器解析cookie并将其保存为本地文件，该文件自动将来自同一服务器的任何请求绑定到这些cookie。
'''



'''
重做练习题
摆放家具
需求：
1）.房子有户型，总面积和家具名称列表
   新房子没有任何的家具
2）.家具有名字和占地面积，其中
   床：占4平米
   衣柜：占2平面
   餐桌：占1.5平米
3）.将以上三件家具添加到房子中
4）.打印房子时，要求输出:户型，总面积，剩余面积，家具名称列表
'''
class jiaju():
    def __init__(self, name, area):
        self.name = name
        self.area = area
    def __str__(self):
        return f"{self.name}占地{self.area}平米"
class fangzi():
    def __init__(self, house, area):
        self.huxing = house
        self.area = area
        self.shengyuarea = area
        self.jiaju = []
    def __str__(self):
        return f"————————分界线————————\n房子户型是{self.huxing}，总面积是{self.area},剩余面积是{self.shengyuarea},家具名称是{self.jiaju}"
    def add_jiaju(self, jiaju1):
        if self.shengyuarea >= jiaju1.area:
            self.jiaju.append(jiaju1.name)
            self.shengyuarea -= jiaju1.area
        else:
            print('家具面积太大了，房间不够放')
bad = jiaju('床', 4)
canzhuo = jiaju('餐桌', 1.5)
yigui = jiaju('衣柜', 3)
print(bad,canzhuo,yigui)
jia = fangzi('一居室',8)
print(jia)
jia.add_jiaju(bad)
print(jia)
jia.add_jiaju(canzhuo)
print(jia)
jia.add_jiaju(yigui)
print(jia)


'''士兵开枪
# 需求：
# 1）.士兵瑞恩有一把AK47
# 2）.士兵可以开火(士兵开火扣动的是扳机)
# 3）.枪 能够 发射子弹(把子弹发射出去)
# 4）.枪 能够 装填子弹 --增加子弹的数量
'''
# #定义一个枪的类型
# class qiang():
#     """
#     定义一个枪的类，初始属性有枪的名字和子弹数量
#     功能是可以换子弹和发射子弹
#     """
#     #定义初始属性
#     def __init__(self,n,m):
#         # 枪名字和枪子弹数量
#         self.name = n
#         self.zidan = m
#     # 换弹功能
#     def huanzidan(self):
#         if self.zidan == 0:
#             while self.zidan<8:
#                 self.zidan+=1
#             print('子弹加完了，快上啊')
#         else:
#             print('打完再换子弹吧')
#     # 发射功能
#     def fashe(self):
#         if self.zidan == 0 :
#             print('没有子弹了，快加点子弹吧')
#         else:
#             while self.zidan > 0:
#                 print('biu ',end='')
#                 self.zidan -=1
#             print()
#     # 输出为枪的名字和子弹数量
#     def __str__(self):
#         return f'{self.name}有{self.zidan}子弹'
# # 定义一个人，初始属性为人名和是否有枪
# class ren():
#     """
#     人类，初始属性为人名和是否有枪
#     开枪功能
#     """
#     #初始属性
#     def __init__(self,name,qiang):
#         self.name = name
#         self.qiang = qiang
#     # 开枪功能
#     def kaihuo(self):
#         self.qiang.fashe()
#     def __str__(self):
#         return f'{self.name}有{self.qiang}'
# ak = qiang('AK47',0)
# ren = ren('六六',ak)
# print(ak)
# print(ren)
# ren.kaihuo()
# ren.qiang.huanzidan()
# ren.kaihuo()
# ren.qiang.huanzidan()
